package org.rui.rpc.registry;

import org.rui.rpc.constant.RegistryKeys;
import org.rui.rpc.util.SpiLoader;

/**
 * @author: linweirui
 * @date: 2024/12/04 15:35
 */
public class RegistryFactory {
    /**
     * 预加载阶段就加载系统和用户的对应接口的实现类map
     * 在getInstance中需要用到全部的map去找到对应的具体实现类
     */
    static {
        SpiLoader.load(Registry.class);
    }

    /**
     * 默认的注册中心为ETCD
     */
    private static final String DEFAULT_REGISTRY = RegistryKeys.ETCD;

    /**
     * 根据传入的注册中心实现类路径加载对应的实例 spi实现
     *
     * @param key 对应的注册中心实现类 如etcd
     * @return
     */
    public static Registry getInstance(String key) {
        return SpiLoader.getInstance(Registry.class, key);
    }
}
